package pzl.com.drawrelated.views;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * @author zl.peng
 */
public class V3 extends View
{
    Paint paint;
    
    public V3(Context context)
    {
        this(context, null);
    }
    
    public V3(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
        paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setAntiAlias(true);
    }
    
    public V3(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
    
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom)
    {
        super.onLayout(changed, left, top, right, bottom);
    }
    
    @Override
    protected void onDraw(Canvas canvas)
    {
        canvas.rotate(-45f);// (顺序：7 )摆正画布内容
        
        canvas.drawColor(Color.CYAN);// (顺序：0) 画布背景色
        canvas.save();// (顺序：1)锁画布，锁定之前的绘制状态
        canvas.translate(20, 20);// (顺序：2-b)把当前画布的原点移到(20,20),后面的操作都以(20,20)作为参照点，默认原点为(0,0)
        canvas.rotate(45f);// (顺序：2-c)
        drawMyRect(canvas);// (顺序：2-a)画一个自定义矩形
        canvas.restore();// (顺序：3)释放状态，把当前画布返回（调整）到上一个save()状态之前
        
        canvas.save();// (顺序：4)锁画布，锁定之前的绘制状态
        canvas.translate(60, 60);// (顺序：5-b)把当前画布的原点移到(60, 60),后面的操作都以(60, 60)作为参照点，默认原点为(0,0)
        drawMyCircle(canvas);// (顺序：5-a)画一个自定义圆
        canvas.restore();// (顺序：6)释放状态，把当前画布返回（调整）到上一个save()状态之前
        
        super.onDraw(canvas);
    }
    
    private void drawMyRect(Canvas canvas)
    {
        Paint p = new Paint();
        p.setStyle(Paint.Style.FILL);
        p.setColor(Color.YELLOW);
        canvas.drawRect(0, 0, 90, 90, p);// 该矩形实际坐标（相对于自定义View）为（20，20）长宽为90
    }
    
    private void drawMyCircle(Canvas canvas)
    {
        Paint p = new Paint();
        p.setStyle(Paint.Style.STROKE);
        p.setColor(Color.RED);
        canvas.drawCircle(0, 0, 33, p);// 该圆实际圆心坐标（相对于自定义View）为(60,60)半径33
    }
    
    /**
     * canvas.skew() canvas.rotate() canvas.translate() canvas.scale() canvas.transform()
     * 这些方法只对之后的操作有效，注意操作的是哪些元素（注意canvas.save()和canvas.restore()对元素状态的影响）
     */
}
